package cn.tedu.web.mapper;

import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import cn.tedu.web.entity.Administrator;

public interface AdministratorMapper extends BaseMapper<Administrator> {
	/**
	 * 检测用户名是否存在
	 * 
	 * @param username
	 * @return
	 */
	// `username`字段在数据库重是唯一键，执行查询的时候，结果要么没有，要么为 1。
	// 使用 count 函数来计数的话，结果要么为 0，要么为 1，正好和 Java 的 Boolean 类型对接
	@Select("SELECT COUNT(1) FROM `ec_administrator` WHERE `username` = #{u}")
	public Boolean exists(@Param("u") String username);

	/**
	 * 检查用户名和密码是否正确
	 * 
	 * @param username
	 * @param password
	 * @return
	 */
	@Select("SELECT `id` FROM `ec_administrator` WHERE `username` = #{u} AND `password` = MD5(#{p})")
	public Long checkUsernameAndPassword(@Param("u") String username, @Param("p") String password);

	/**
	 * 分页获取管理员的列表数据
	 * 
	 * @param offset 偏移量
	 * @param limit  限制量
	 * @return
	 */
	@Select("SELECT id, username, `disabled` FROM ec_administrator WHERE deleted = 0 LIMIT #{o}, #{l}")
	public List<Administrator> findAdmin(@Param("o") int offset, @Param("l") int limit);

	/**
	 * 求管理员表的总数
	 */
	@Select("SELECT COUNT(1) FROM ec_administrator WHERE deleted = 0")
	public Integer count();

	// mp分页
	IPage<Administrator> pageList(Page<Administrator> page);

	// 插入数据到管理员表
	@Insert("INSERT INTO ec_administrator (`username`, `password`) VALUES (#{username}, MD5(#{password}));")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
	public int insert(Administrator administrator);

	/**
	 * 将指定ID的数据进行软删除，其本质就是将 deleted 字段更新为 1
	 */
	@Update("UPDATE ec_administrator SET `deleted` = 1 WHERE id = #{id}")
	public Integer softDelete(@Param("id") Long id);
	/**
	 * 将指定ID的数据的状态更改为【启用】
	 */
	@Update("UPDATE ec_administrator SET `disabled` = 0 WHERE id = #{id}")
	public Integer enable(@Param("id") Long id);
	/**
	 * 将指定ID的数据的状态更改为【禁用】
	 */
	@Update("UPDATE ec_administrator SET `disabled` = 1 WHERE id = #{id}")
	public Integer disable(@Param("id") Long id);
	/**
	 * 修改指定ID的账号密码
	 */
	@Update("UPDATE ec_administrator SET `password` = MD5(#{pwd}) WHERE id = #{id}")
	public Integer passwd(@Param("id") Long id, @Param("pwd") String password);
}